#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "qcustomplot.h"
#include <QSerialPort>			//访问串口的库
#include <QSerialPortInfo>		//查询串口信息的库
#include <QDebug>				//用于调试打印输出的库
#include <QMessageBox>			//一个小的弹窗库
#include "QThread"
#include "serialworker.h"
#include <QQueue>
#include <QMutex>
#include <QMutexLocker>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    enum class Con
    {
        connected,
        disconnected,

    };

    void UiInit();
    void init_connect();

    void setSerial();

    void processReceivedData();

signals:
    void command(const QByteArray command);
    void serial_finish();


public slots:
    void btn_opened();
    void btn_flushed();
    void onDataReceived(const QByteArray &data);
    void updateGraph();
    void showMessageBox(const QString &message);

private slots:
    void on_btn_clear_text_clicked();

private:
    void try_demo();
    void init_btn();
    void init_baud();
    Ui::MainWindow *ui;

    QMap<QString, QSerialPortInfo> Qser_map;
    QStringList Qser_baud;
    QMap<QString, QList<int>> m_groupData;  // 用于存储每个 group 的 Y 轴数据


    QThread *receiverThread;  // 用于接收数据的线程
    SerialWorker *receiver ;
    Con con;
    QQueue<QByteArray> m_dataQueue;  // 用于存储接收到的数据

    QQueue<double> m_xData;  // Queue to hold X data (time or sequence)
    QQueue<double> m_yData;  // Queue to hold Y data (sensor values)
    QMutex m_mutex;  // 用于保护队列的互斥锁
    QMutex m_dataMutex;
    QTimer *m_updateTimer;

};
#endif // MAINWINDOW_H
